package com.it.homrwork;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author げっしょく
 * @date 2021/8/10
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        /*
                已知有如下类：


    需求：使用反射技术完成以下需求：
        1. 创建Person对象
        2. 给name属性赋值
        3. 调用eat方法和getName方法
         */
        Class aClass = Class.forName("com.it.homrwork.Person");
        Constructor declaredConstructor = aClass.getDeclaredConstructor(int.class);
        declaredConstructor.setAccessible(true);
        Person p = (Person) declaredConstructor.newInstance(20);
        Field name = aClass.getDeclaredField("name");
        name.setAccessible(true);
        name.set(p, "牛马");
        Method eat = aClass.getMethod("eat", String.class);
        eat.invoke(p, "草");
        Method getName = aClass.getDeclaredMethod("getName");
        getName.setAccessible(true);
        String name1 = (String) getName.invoke(p);
        System.out.println(name1);
    }
}

